#include <algorithm>
#include <cmath>
#include <cstring>
#include <deque>
#include <functional>
#include <iostream>
#include <list>
#include <map>
#include <memory>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <string_view>
#include <unordered_map>
#include <unordered_set>
#include <vector>

using namespace std;

struct TreeNode
{
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode() : val(0), left(nullptr), right(nullptr) {}
    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
    TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
};

struct ListNode
{
    int val;
    ListNode *next;
    ListNode() : val(0), next(nullptr) {}
    ListNode(int x) : val(x), next(nullptr) {}
    ListNode(int x, ListNode *next) : val(x), next(next) {}
};

ListNode *arrToList(vector<int> &arr)
{
    ListNode *head = nullptr;
    ListNode *tail = head;
    for (auto a : arr)
    {
        if (head == nullptr)
        {
            head = new ListNode(a);
            tail = head;
            continue;
        }
        tail->next = new ListNode(a);
        tail = tail->next;
    }
    tail->next = nullptr;
    return head;
}

void printList(ListNode *head)
{
    while (head != nullptr)
    {
        cout << head->val << "\t";
        head = head->next;
    }
    cout << endl;
}

template <typename T>
void printArr(vector<T> &nums)
{
    for (int i = 0; i < nums.size(); ++i)
    {
        cout << nums[i] << "\t";
    }
    cout << endl;
}

template <typename T>
void printArr2(vector<vector<T>> &nums)
{
    for (int i = 0; i < nums.size(); i++)
    {
        printArr(nums[i]);
    }
    cout << endl;
}

//-------------------------------------------------------------------------

//-------------------------------------------------------------------------

int main(int argc, char const *argv[])
{
    return 0;
}